home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / edit / pt20pc.zip / DOSMEM.C < prev    next >
C/C++ Source or Header  |  1991-02-04  |  1KB  |  59 lines

  1. #include "dos.h"
  2.  
  3. main(argc, argv)
  4.     char *argv[];
  5. {
  6.     extern unsigned int _psp;
  7.     struct SREGS sr;
  8.     int i, j;
  9.     char far *fp;
  10.     char far *makePointer(unsigned int, unsigned int);
  11.     long longLen, longSum;
  12.     unsigned int *uip, procid, len, seg;
  13.     unsigned char zch, ch, *cp;
  14.     
  15.     segread( &sr );
  16.     fp = makePointer(0, _psp - 1);
  17.     fp = makePointer(0xC3, 0);
  18.     cp = (unsigned char *)&seg;
  19.     *cp++ = *fp++;
  20.     *cp = *fp;
  21.     fp = makePointer(0x24, seg);
  22.     cp = (unsigned char *)&seg;
  23.     *cp++ = *fp++;
  24.     *cp = *fp;
  25.     longSum = 0;
  26.     while( 1 ) {
  27.         fp = makePointer(0, seg);
  28.         zch = *fp;
  29.         cp = (unsigned char *)&procid;
  30.         *cp++ = *(fp+1);
  31.         *cp = *(fp+2);
  32.         cp = (unsigned char *)&len;
  33.         *cp++ = *(fp+3);
  34.         *cp = *(fp+4);
  35.         longLen = 16L * (long)len;
  36.         longSum += longLen;
  37.         printf(
  38. "Block @%04X0: %c  ID=%04X; length = %6ld [=0x%04X0] {%6ld}\n",
  39.             FP_SEG(fp), zch, procid, longLen, len, longSum);
  40.         if( zch == 'Z' )
  41.             break;
  42.         seg += 1 + len;
  43.     }
  44.     exit( 0 );
  45. }
  46.  
  47. char far *
  48. makePointer(offset, segment)
  49.     unsigned int offset, segment;
  50. {
  51.     unsigned int *uip;
  52.     char far *fp;
  53.     
  54.     uip = (unsigned int *)&fp;
  55.     *uip++ = offset;
  56.     *uip = segment;
  57.     return fp;
  58. }
  59.